# coding=utf-8

import time

import pymysql
import schedule

import logging


# Creating and Configuring Logger

def setup_logger():
    logging.basicConfig(filename='mysql.log', level=logging.NOTSET, format='%(asctime)s - %(levelname)s - %(message)s',
                        datefmt='%Y-%m-%d %H:%M:%S')


setup_logger()

# 链接服务端
db = pymysql.connect(
    host='127.0.0.1',  # MySQL服务端的IP地址
    # port='3306',  # MySQL默认PORT地址(端口号)
    user='root',  # 用户名
    password='root',  # 密码,也可以简写为passwd
    database='db_flood',  # 库名称,也可以简写为db
    # charset='utf8'  # 字符编码
)

# 产生获取命令的游标对象
# cursor = conn_obj.cursor()  # 括号内不写参数,数据是元组套元组
cursor = db.cursor(
    cursor=pymysql.cursors.DictCursor
)  # 括号内写参数,数据会处理成字典形式

logging.info("=============== 开始执行保险订单有效期监听脚本 ===============")


def up_mysql(json):
    logging.info("=============== 更新到期保单 ===============")
    for i in range(len(json)):
        order_info = json[i]
        logging.info("=============== 更新到期id：%s", order_info['id'])
        sql_update = "update la_insure_order_info set is_effective = 0 where id = %s;" % (order_info['id'])
        logging.info("=============== 更新sql语句：%s", sql_update)
        update_rows = cursor.execute(sql_update)
        logging.info("=============== 执行更新条数：%s", update_rows)  # 执行SQL语句之后受影响的行数
        db.commit()
        logging.info("")


def listen_script():
    logging.info("=============== 查询到期保单 ===============")
    date_time = time.strftime("%Y-%m-%d %X", time.localtime())
    logging.info("=============== 当前时间：%s", date_time)
    # SQL语句会被高亮显示
    sql_select = "select * from la_insure_order_info where is_effective = 1 and end_time <= '%s';" % (date_time)
    logging.info("=============== 查询sql语句：%s", sql_select)
    # 执行SQL语句
    affect_rows = cursor.execute(sql_select)
    # 提交事务
    db.commit()
    logging.info("=============== 到期保险订单条数：%s", affect_rows)  # 执行SQL语句之后受影响的行数
    # 获取数据
    # res = cursor.fetchall()  # 获取所有数据
    # res = cursor.fetchone()  # 获取一条数据
    # res = cursor.fetchmany(2)  # 获取指定个数数据
    # cursor.scroll(1, 'relative')  # 相对于当前位置往后移动一个单位
    # res = cursor.fetchall()  # 获取所有数据
    # cursor.scroll(1, 'absolute')  # 相对于起始位置往后移动一个单位
    json = cursor.fetchall()  # 获取所有数据
    logging.info("")
    if len(json) > 0:
        up_mysql(json)


# 启动执行一次
listen_script()

# 每秒执行定时任务
schedule.every(10).seconds.do(listen_script)

# 保持程序运行
while True:
    schedule.run_pending()
    time.sleep(1)
